草庐IT

Java final 与 C++ const

全部标签

c++ - STL 算法和 const_iterators

今天我写了一个小谓词来查找容器中的匹配符号。但是我遇到了一个问题:我想在类的常量方法内的std::find_if调用中使用这个谓词,在属于这个类。但我刚刚注意到std::find和std::find_if都不能对const_iterators进行操作!我检查了一些C++引用资料,似乎没有std::find或std::find_if版本接受/返回const_iterators。我只是不明白为什么,因为据我所见,这些算法无法修改迭代器引用的对象。这是在SGI实现中记录std::find的方式:Returnsthefirstiteratoriintherange[first,last)suc

c++ - C++ 中的 const 对象

我有一个关于常量对象的问题。在以下程序中:classconst_check{inta;public:const_check(inti);voidprint()const;voidprint2();};const_check::const_check(inti):a(i){}voidconst_check::print()const{inta=19;coutvoidprint()是类const_check的常量成员函数,所以根据常量的定义任何试图改变inta应该会导致错误,但该程序对我来说工作正常。我想我在这里有些困惑,有人能告诉我为什么编译器没有将其标记为错误吗?

c++ - 为什么以下不调用重载的 operator== (const String &, const String &)? "cobble"== "stone"

为什么以下不调用重载的operator==(constString&,constString&)?"cobble"=="stone" 最佳答案 因为在C++中,字符串字面量是constchar[]类型(也叫以零结尾的字符串常量),而不是std::string,更不用说String(无论是什么)。有一个内置的operator==通过比较它们的地址来比较两个char*。由于数组可隐式转换为指向其第一个元素的指针(由于,您猜对了,C继承),此运算符介入,您比较的是这些文字在内存中的地址。假设您的String类具有来自constchar*(

c++ - 如何从 LPWSTR 转换为 'const char*'

在使用C++/CLI将结构从C#转换为C++之后:publicvaluestructSampleObject{LPWSTRa;};我想打印它的实例:printf(sampleObject->a);但是我得到了这个错误:Error1errorC2664:'printf':cannotconvertparameter1from'LPWSTR'to'constchar*'如何将LPWSTR转换为char*?提前致谢。 最佳答案 使用wcstombs()函数,位于.下面是如何使用它:LPWSTRwideStr=L"Somemessage";

c++ - 如何在实现文件中初始化一个 static const set<string>?

我对staticconstset的初始化似乎不正确,我很感激你的指导方针:obj.h:classobj{...private:staticconstsetkeywords;...}obj.cpp:conststringkw[]={"GTR","LTR","LEQ","GEQ","NEQ","SQRT","sqrt"};constsetobj::keywords=(kw,kw+sizeof(kw)/sizeof(kw[0]));但这会产生错误:error:conversionfrom‘conststring*{akaconststd::basic_string*}’tonon-scala

c++ - 如何将对象添加到 vector<const Obj&>?

我不确定为什么这不能编译:std::vectormyVector;voidfoo(constObj&obj){myVector.push_back(obj);}抱歉,关于我要实现的目标的一些额外信息:我不能在不破坏接口(interface)的情况下更改foo的签名,但我只想卡在通过foo传递的对象上。我确实想存储指向它们的指针,但我对如何做到这一点的语法感到困惑。 最佳答案 您不能拥有引用vector。因为vector中的东西必须是可复制和可分配的,而引用不是这些。您可能需要一个指针vector:std::vectormyVecto

c++ - '从 some_type** 到 const some_type** 的无效转换'

我有一个函数需要constsome_type**作为参数(some_type是一个结构,函数需要一个指向这种类型数组的指针).我声明了一个some_type*类型的局部变量,并对其进行了初始化。然后我将该函数称为f(&some_array),编译器(gcc)说:error:invalidconversionfrom‘some_type**’to‘constsome_type**’这里有什么问题?为什么我不能将变量转换为常量? 最佳答案 参见:Whycan'tIpassachar**toafunctionwhichexpectsaco

c++ - clang 和 gcc 之间对三元运算符的 const 引用地址的差异

我对这里发生的事情有一个模糊的想法...它与this有关但我想知道为什么clang++和g++以不同的方式处理这个问题。这里的未定义行为在哪里?注意:这与模板无关——我只是使用它们来使示例更紧凑。这都是关于whatever的类型。#include#includetemplatevoidtest(){Twhatever='c';constchara='a';std::cout();test();return0;}gcc输出(测试到4.9.3):begin:0x7fffe504201fref:0x7fffe504201fbegin:0x7fffe504201eref:0x7fffe5042

c++ - 有没有理由我们能够在类定义中定义 [static const int] 而不是其他 static const 类型?

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Whyaren'tstaticconstfloatsallowed?在C++中这不可能吗?这让我很困惑。staticconstintA=100;//noerrorstaticconstfloatB=2.0f;//error,can'tdefinethistypeinclassdefinition.

传递 const 数组时 C++ 错误区分特化

考虑代码templateclassB;templateclassB{};templateclassB{};templateclassB{};templateclassB{};以下模板实例化工作正常:AAA但下面的不起作用:A是否有某种原因导致此特定组合无效,或者它可能是g++4.6.3的错误?顺便说一句,我设法使用SFINAE和boost::disable_if解决了这个问题,所以至少问题解决了。编辑我忘了提到有问题的错误是一个模棱两可的类模板实例化,它无法决定是对const的重载还是对数组的重载。EDIT2这与指针无关,这里是完整的上下文:我正在阅读C++TemplateMetapr